/*
 * Copyright (c)	2010	Bo Zhou<Bo.Schwarzstein@gmail.com>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 
		http://www.apache.org/licenses/LICENSE-2.0 
 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include "MeshSmoothing.h"

/** \brief Basic Laplacian Smoothing
 *
 * Laplacian smoothing algorithm is linear, 1st order iterative method, fast and easy but it causes shrink.
 */
class LaplacianMeshSmoothing : public MeshSmoothing
{
public:
	enum WeightType
	{
		EQUAL,
		FUJIWARA
	};

	LaplacianMeshSmoothing(const MObject& MeshObject);
	virtual ~LaplacianMeshSmoothing();

	void SetWeightType(const WeightType WT);
	const WeightType GetWeightType() const;

	void SetLambda(const float Lambda);
	const float GetLambda() const;

	virtual bool Smooth();
private:
	WeightType mWT;

	float mLambda;
};
